The proliferation of the Internet has spawned an unprecedented level of information exchange. Computer programmers have been particularly successful at taking advantage of such exchanges, forming and participating in peer discussion groups. Participants in such groups frequently propose new and better ways of writing programs that process data, or of organizing the data itself, and these proposals are quickly analyzed and critiqued by other programmers. In such an environment, ideas that work well are quickly adopted, and those that don't are promptly discarded. Many of the better ideas end up published in books and magazines, and extensively posted on Internet websites. In this manner, online communities can cooperatively develop, disseminate, maintain and improve those algorithms and data structures that work best for a given purpose over a variety of applications, what is sometimes referred to as “best practices.” Such an approach may also be used by standards groups to develop and disseminate specific programming and data representation recommendations for use within a standard (i.e., specific “best practices” for implementing a standard), and to maintain and improve such recommendations. This described process of incorporating changes to the structure of a program or data structure without modifying its external functional behavior or existing functionality is sometimes referred to as “code refactoring.” In the more general case, wherein the changes do not necessarily preserve behavior or functionality (e.g., changes made with specific business objectives in mind), the described process is sometimes referred to as “code transformation,” and the description of such a code transformation is sometimes referred to as a “knowledge capsule.”
The rapidly accelerating ability to disseminate both new and improved methods and data structures for use as code transformations (with the goal of improving the business or technical value of source code), however, has proven to be both advantageous and problematic. While it is extremely advantageous for a programmer to have immediate access to what is essentially a continuously growing worldwide database of knowledge capsules, and to a continuous stream of improvements and updates to such knowledge capsules, the ongoing increase in the number, sophistication and update frequency of knowledge capsules can rapidly outpace a programmers ability to assimilate the knowledge capsules, to identify code that is affected by the knowledge capsules, to properly apply the knowledge capsules to source code, and to test the modified code, a process that for the most part is performed manually by the programmer.
Further, much of the actual dissemination of such knowledge capsules is also performed manually. Knowledge capsules are published in books and magazines and posted on Internet websites where they can be reviewed and (optionally) downloaded by programmers for later incorporation into both new and existing programs and data structures. Additionally, although tools do exist to assist a programmer in identifying code segments to which a knowledge capsule may apply (e.g., advanced search and replace tools that are part of a code maintenance system), such systems still require that each individual user specify the search criteria (i.e., heuristics or “code smells” that identify code possibly needing the modifications or changes embodied in the knowledge capsule). This effort can take a significant amount of time, is prone to errors, may not identify all of the candidate code segments (depending upon how well the search criteria is constructed), and creates an enormous duplication of effort among programmers.